/**
 * <b>项目名称：</b>网络应用框架<br/>
 * <b>包    名：</b>com.hhwy.framework.util<br/>
 * <b>文 件 名：</b>ReflectTools.java<br/>
 * <b>版本信息：</b><br/>
 * <b>日    期：</b>2015年5月26日-下午5:18:04<br/>
 * <b>Copyright (c)</b> 2015恒华伟业科技股份有限公司-版权所有<br/>
 * 
 */
package com.hhwy.framework.util;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

/**
 * <b>类 名 称：</b>ReflectTools<br/>
 * <b>类 描 述：</b><br/>
 * <b>创 建 人：</b>lhm<br/>
 * <b>修 改 人：</b>lhm<br/>
 * <b>修改时间：</b>2015年5月26日 下午5:18:04<br/>
 * <b>修改备注：</b><br/>
 * 
 * @version 1.0.0<br/>
 */
public class ReflectTools {

	/**
	 * invoke(通过反射执行一个对象的方法)<br/>
	 * 
	 * @param obj
	 * @param methodName
	 * @return
	 * @throws NoSuchMethodException
	 * @throws SecurityException
	 * @throws IllegalAccessException
	 * @throws IllegalArgumentException
	 * @throws InvocationTargetException
	 *             Object
	 * @exception
	 * @since 1.0.0
	 */
	public static Object invoke(Object obj, String methodName)
			throws NoSuchMethodException, SecurityException,
			IllegalAccessException, IllegalArgumentException,
			InvocationTargetException {

		return invoke(obj, methodName, null);
	}

	/**
	 * invoke(通过反射执行一个对象的方法)<br/>
	 * 
	 * @param obj
	 * @param methodName
	 * @param params
	 * @return
	 * @throws NoSuchMethodException
	 * @throws SecurityException
	 * @throws IllegalAccessException
	 * @throws IllegalArgumentException
	 * @throws InvocationTargetException
	 *             Object
	 * @exception
	 * @since 1.0.0
	 */
	public static Object invoke(Object obj, String methodName, Object... params)
			throws NoSuchMethodException, SecurityException,
			IllegalAccessException, IllegalArgumentException,
			InvocationTargetException {
		Class[] parameterTypes = null;
		if (params != null) {
			parameterTypes = new Class[params.length];
			for (int i = 0; i < params.length; i++) {
				parameterTypes[i] = params[i].getClass();
			}
		}
		Method method = obj.getClass().getMethod(methodName, parameterTypes);
		if (params != null)
			return method.invoke(obj, params);
		else
			return method.invoke(obj);
	}
}
